const express = require('express');
const axios = require('axios');
const fs = require('fs');
const multer = require('multer'); // 用于处理文件上传

const app = express();

// 填写您的 API 密钥和 SECRET
const API_KEY = '1jpd6i4N2eG5V6FRiEY701VP'; // 替换为你的 API Key
const SECRET_KEY = '83cEnBsytWDWVH15H1qnNpEJWipGH81M'; // 替换为你的 Secret Key
const DEEPL_AUTH_KEY = 'sk-819fa5023a194370b12e7a56e3cf28d6'; // 替换为你的 DeepSeek 授权密钥

// 获取 Access Token
async function getAccessToken() {
    const tokenUrl = `https://aip.baidubce.com/oauth/2.0/token`;
    const response = await axios.post(tokenUrl, null, {
        params: {
            grant_type: 'client_credentials',
            client_id: API_KEY,
            client_secret: SECRET_KEY,
        },
    });
    if (!response.ok) {
        throw new Error('Failed to fetch access token');
    }
    const data = await response.json();
    console.log('Access Token:', data.access_token); // 打印 Access Token
    return response.data.access_token; // 返回 Access Token
}

// 语音识别函数
async function convertSpeechToText(audioFilePath) {
    const accessToken = await getAccessToken();
    const speechUrl = `https://vop.baidu.com/server_api?access_token=${accessToken}`;
    
    // 读取音频文件
    const audioData = fs.readFileSync(audioFilePath);
    const base64Audio = audioData.toString('base64'); // 转换为 Base64

    // 发送 POST 请求
    const response = await axios.post(speechUrl, {
        format: 'wav', // 根据音频文件类型选择格式
        rate: 16000, // 音频采样率
        channel: 1, // 单声道
        token: accessToken,
        cuid: 'your_device_id', // 自定义设备标识
        audio: base64Audio, // 发送的音频（Base64）
    });

    console.log('返回信息:', response.data); // 输出返回信息
    return response.data; // 返回识别结果
}

// 处理语音输入的路由
app.post('/upload', multer({ storage: multer.memoryStorage(), limits: { fileSize: 5 * 1024 * 1024 }}).single('audio'), async (req, res) => {
    try {
        const result = await convertSpeechToText(req.file.buffer);
        res.json({
            success: true,
            result: result
        });
    } catch (error) {
        console.error('发生错误:', error);
        res.status(500).json({ success: false, message: error.message });
    }
});

// 处理文本问答的路由
app.post('/ask', express.json(), async (req, res) => {
    const { question } = req.body;
    try {
        const answer = await getDeepLResponse(question); // 调用 DeepSeek API
        res.json({
            success: true,
            answer: answer
        });
    } catch (error) {
        console.error('发生错误:', error);
        res.status(500).json({ success: false, message: error.message });
    }
});

// 启动服务器
const PORT = 3000; // 监听的端口
app.listen(PORT, () => {
    console.log(`服务器运行在 http://localhost:${PORT}`);
});

// DeepSeek API 地址
async function getDeepLResponse(text) {
    const url = `https://api.deepl.com/v2/translate`; // DeepL 翻译 API 地址
    const params = new URLSearchParams();
    params.append('auth_key', DEEPL_AUTH_KEY); // DeepL 授权密钥
    params.append('text', text);
    params.append('target_lang', 'ZH'); // 目标语言，可以根据需要修改

    const response = await axios.post(url, params);
    return response.data.translations[0].text; // 返回翻译结果
}